/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.si3.controlador;

import com.si3.modelo.EstadoProyecto;
import com.si3.modelo.Login;
import com.si3.modelo.ObjetoAnio;
import com.si3.modelo.PaginaInfo;
import com.si3.modelo.Profesor;
import com.si3.modelo.Propuesta;
import com.si3.modelo.Proyecto;
import com.si3.modelo.Solicitud;
import com.si3.modelo.Usuario;
import com.si3.servicio.PropuestasService;
import com.si3.servicio.SolicitudesService;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;


public class GetSolicitudesController extends SimpleFormController
{
    private SolicitudesService solicitudesService;	
	PaginaInfo paginainfo;
	List <Solicitud> solicitudes;
	private Calendar fFecha;
	List<ObjetoAnio> anios;

	
    public GetSolicitudesController()
    {
        setCommandClass(ObjetoAnio.class);
        setCommandName("year");
        setFormView("listaSolicitudes");
        setSuccessView("listaSolicitudes"); 
    	paginainfo = new PaginaInfo();
    	solicitudes= null;
    	anios=null;
    	fFecha=Calendar.getInstance();
    }
    

    public SolicitudesService getSolicitudesService()
    {
        return this.solicitudesService;
    }   


    public void setSolicitudesService(SolicitudesService solicitudesService)
    {
        this.solicitudesService = solicitudesService;
    }
    
    private void setPageInfo(PaginaInfo paginainfo,String page)
    {
    	if (page==null)
      	  paginainfo.setCurrentPage(0);
      	else
      	  paginainfo.setCurrentPage(Integer.parseInt(page));   	
    }
    
    protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception 
    {
    	Map referenceData = new HashMap(); 

        String page ="";


        Login login = (Login) request.getSession().getAttribute("login");
        page = (String)request.getParameter("page");   
        if (login.getUserType() == Usuario.TipoUsuario.ADMIN) 
        {
        	
            ObjetoAnio objetoanio = (ObjetoAnio) command;
            int anio=fFecha.get(Calendar.YEAR);
            if ((objetoanio!=null) &&(objetoanio.getYear()!=null))
            {        	
          	  anio=Integer.parseInt(objetoanio.getYear());
            }
            paginainfo.setRowCount(solicitudesService.getCount(anio));
        	this.setPageInfo(paginainfo, page);
       	    
        	anios = solicitudesService.getAnios(); 
            referenceData.put("tipo", "administrador");
            if (anios.size()==0)
            {
               setFormView("showMessage");
               referenceData.put("message", "No existe actualmente ninguna solicitud");
            }
            else
            {        	
	        	solicitudes = solicitudesService.getSolicitudes(paginainfo,anio);	    
	            setCommandClass(ObjetoAnio.class);
	            setCommandName("year");  
	            referenceData.put("years", anios);
	            referenceData.put("solicitudes", solicitudes);
	            referenceData.put("paginainfo", paginainfo);
            }
        }
        return referenceData;
    }
    
    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, 
                                    HttpServletResponse response, 
                                    Object command, 
                                    BindException errors) throws Exception 
    {
        ObjetoAnio objetoanio = (ObjetoAnio) command;
        Login loginObj = (Login) request.getSession().getAttribute("login");
        ModelAndView mv = new ModelAndView("listaSolicitudes");
        if (loginObj.getUserType() == Usuario.TipoUsuario.ADMIN)
        {            
            objetoanio = (ObjetoAnio) command;
            int anio=fFecha.get(Calendar.YEAR);
            if ((objetoanio!=null) &&(objetoanio.getYear()!=null))
            {        	
          	  anio=Integer.parseInt(objetoanio.getYear());
            }
            
            paginainfo.setRowCount(solicitudesService.getCount(anio));
            this.setPageInfo(paginainfo, "1");    
            
            
        	anios = solicitudesService.getAnios(); 
        	solicitudes = solicitudesService.getSolicitudes(paginainfo,anio);
        	
        	mv.addObject("year", objetoanio);     	  
        	mv.addObject("tipo", "administrador");
        	mv.addObject("years", anios);  
            mv.addObject("solicitudes", solicitudes);
            mv.addObject("paginainfo", paginainfo);          
        }
        return mv;
        
    }

}
